[참조]
프로그램을 작성하게 되면 거의 대부분 외부 라이브러리의 활용이 필요하다.
프로그램의 규모가 커짐에 따라 자신이 직접 코딩한 소스도 분할하여야 한다.
여기에 대응하는 개념이 모듈(module)과 패키지(package)이다.
항목 | 모듈 (Module) | 패키지 (Package) | 파일 분할 (File Splitting) |
---|---|---|---|
정의 | 하나의 Python 파일 (.py)로 구성된 코드 묶음 | 여러 모듈(.py 파일)로 구성된 디렉토리 | 기능별로 파일을 나누어 관리하는 방법 |
사용 예시 | import math |
import numpy.linalg |
import BeamFunctions |
특징 | 단일 기능 또는 연관 함수 제공 | 구조적이며 계층적으로 구성 | 코드를 읽기 쉽게 분할함 |
디렉토리 필요 여부 | 필요 없음 | 필요 (하위 폴더 구조) | 선택 사항 |
1) 모듈의 정의
(예시)
import os
os.environ
os.chdir() # 디렉토리 변경(change dir)
os.getcwd() # 현재 디렉토리 가져오기(get current working dir)
os.system('dir')
os.system('cls')
os.mkdir()
os.path.dirname(path) # Return the dir name of pathname path.
os.path.basename(path) # Return the base name of pathname path.
os.rmdir() # remove an empty dir
os.remove() # remove a file.
os.unlink()
os.rename(src,dst)
(예시)
def cls():
import os
os.system('cls')
cls()
2) 모듈의 호출 방법
(예시 1)
from mysolver import * # 모든 함수 import
xNewton = solve_by_newton(func, der, 10)
(예시 2)
from mysolver import solve_by_newton, tol # 일부 함수 import
xNewton = solve_by_newton(func, der, 10)
print(tol)
(예시 3)
import mysolver as solver # 이름을 solver로 변경하여 import
xNewton = solver.solve_by_newton(func, der, 10)
(예시 4)
from mysolver import solve_by_newton as solve # 일부 함수를 변경된 이름으로 import
xNewton = solve(func, der, 10)
(비교) import vs from
import(가져오기)는 전체 모듈(module)을 가져오는 데 사용되며,
from(불러오기)은 모듈(module)에서 특정 개체(object)를 가져오거나
모듈의 모든 개체(object)를 현재 네임스페이스(namespace)로 가져오는 데 사용된다.
3) 모듈 테스트
(예시) fibo.py
# fibo.py
def fib(n):
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a + b
print()
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
fibo.py가 있는 디렉토리에서 다음과 같이 모듈을 실행한다.
# 실행 예시
# > python fibo.py 100
# 또는
import fibo
fibo.fib(100) # 출력: 1 1 2 3 5 8 13 21 34 55 89
4) dir(모듈)
(예시)
>>> dir(fibo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib']
(예시 1)
import sound.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
(예시 2)
from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
(예시 3)
from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)
(예시 4)
from sound.effects.echo import *
echofilter(input, output, delay=0.7, atten=4)
부 패키지(sub-package) 자체를 임포트할 수도 있다.
(예시 5)
from sound.effects import *
echo.echofilter(input, output, delay=0.7, atten=4)
(예시: 메인) beam.py
import BeamFunctions as beam
m1 = beam.ElementMass(m, L1)
k1 = beam.ElementStiffness(E, I, L1)
M0 = beam.Assemble(M0, m1, 1, 2)
(예시: 서브) BeamFunctions.py
def ElementMass(m, L):
# 질량 행렬 계산 코드
pass
def ElementStiffness(E, I, L):
# 강성 행렬 계산 코드
pass
def Assemble(K, k, i, j):
# 조립 함수
pass